package cn.edu.zzuli;

/**
 * @Date: 2021/3/6 20:43
 * @Author: 绯色下午茶
 * @Description:
 */
class Phone{
    public static synchronized void sendEmail() throws InterruptedException {
//        TimeUnit.SECONDS.sleep(4);
        System.out.println("*********发送邮件");
    }
    public static synchronized void sendSMS(){
        System.out.println("*********发送短信");
    }
    public  void hello(){
        System.out.println("*********hello");

    }
}

/**
 * 题目    多线程8锁
 * 1.标准访问synchronized，请问先打印邮件还是短信
 *      有锁，发生冲突，看系统调度，谁抢到了谁就占有，另一个阻塞
 * 2.标准访问synchronized，邮件方法暂停4秒。请问先打印邮件还是短信
 *      有锁，发生冲突，看系统调度，谁抢到了谁就占有，另一个阻塞
 * 3.新增一个普通方法没有synchronized，请问是先打印邮件，还是先hello
 *      一个有锁，一个没有，不冲突,看系统调用哪个线程，哪个先调用就先执行哪个
 * 4.两个手机，标准访问synchronized。请问是先打印邮件，还是先短信
 *      锁的是两个对象，不冲突，看系统调度，哪个先调用就先执行哪个
 * 5.两个静态同步方法 static synchronized，同一部手机，先打印邮件，还是先短信
 *      锁的是同一个class，冲突，谁抢到谁就占有，另一个阻塞
 * 6.两个静态同步方法 static synchronized，两部手机，先打印邮件，还是先短信
 *      锁的是同一个class，冲突，谁抢到谁就占有，另一个阻塞
 * 7.一个普通同步方法synchronized，一个静态同步方法 static synchronized，同一部手机，先打印邮件，还是先短信
 *      一个锁类class，一个锁实例对象，这两个冲突，不干扰
 * 8.一个普通同步方法synchronized，一个静态同步方法 static synchronized，两部手机，先打印邮件，还是先短信
 *     一个锁类class，一个锁实例对象， 这两个不冲突
 */
public class Lock8 {
    public static void main(String []args) throws InterruptedException {

        Phone phone = new Phone();
        Phone phone2 = new Phone();
        new Thread(()->{
            try {
                phone.sendEmail();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        },"A").start();


        new Thread(()->{
//            phone2.sendSMS();
            phone.hello();
        },"B").start();
    }
}
